package cz.pecinovsky.česky.oopnz._115_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz._000_.Run;

import cz.pecinovsky.česky.oopnz.správce.Přesouvač;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;

import cz.pecinovsky.česky.oopnz.utility.Pozice;

import cz.pecinovsky.česky.oopnz.utility.Barva;
import cz.pecinovsky.česky.oopnz.utility.IO;


//import static cz.pecinovsky.česky.oopnz._115_._117_Světlo_119.Světlo;
import static cz.pecinovsky.česky.oopnz._115_.Světlo_120_124.Světlo;


//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí: Není - Toto_je_nově_definovaná_třída
 *
 * Projekt  018z_02_Tvary
 *  + testBlikni()
 *
 * Projekt  019z_11_Správce
 *   ~ Třída převedena do projektu ovládaného správcem plátna
 *</pre>
 */
public class SvětloTest_117_124
{ static
//%X- ----- Konec přeskakovaného textu -----


/*******************************************************************************
 * Testovací třída {@code SvětloTest}  slouží ke komplexnímu otestování
 * třídy {@link SvětloTest}.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class SvětloTest extends junit.framework.TestCase
{
//%X+ <119
    private SprávcePlátna SP;
//%X-
    private Světlo světlo0;
    private Světlo světloXY;
    private Světlo světloXYB;
//%X+ <122
    private Světlo světloXYP;
    private Světlo světloXYPB;
    private Světlo světloXYPBZ;
//%X-



//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *
     * @param název  Název konstruovaného testu
     */
    public SvětloTest( String název )
    {
        super(název);
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Inicializace předcházející spuštění každého testu a připravující tzv.
     * přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat.
     */
    @Override
    protected void setUp()
    {
        světlo0    = new Světlo();
        světloXY   = new Světlo( 50,  50);
        světloXYB  = new Světlo(100, 100, Barva.ČERVENÁ);
//%X+ <122
        světloXYP  = new Světlo(  0, 100, 100);
        světloXYPB = new Světlo(100,   0, 100, Barva.MODRÁ);
        světloXYPBZ= new Světlo(150, 150, 150, Barva.FIALOVÁ, Barva.ŽÁDNÁ);
//%X-
//%X+ <119

        SP = SprávcePlátna.getInstance();
        SP.přidej(světlo0);
        SP.přidej(světloXY);
        SP.přidej(světloXYB);
//%X-
//%X+ <122
        SP.přidej(světloXYP);
        SP.přidej(světloXYPB);
        SP.přidej(světloXYPBZ);
//%X-
        
        IO.zpráva("Světla připravena");
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @Override
    protected void tearDown()
    {
    }


//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//%X+ <123

    /***************************************************************************
     * Vyzkouší změny pozice a velikosti zadaného světla.
     */
    private void pomPoziceVelikost(Světlo s)
    {
        final int ms = 500;
        s.setPozice(0, 150);
        IO.čekej(ms);
        s.setModul(150);
        IO.čekej(ms);
        s.setModul(25);
        IO.čekej(ms);
        SP.odstraň(s);
        IO.čekej(ms);
    }

//%X-
//%X+ <123


//%X-
//== INTERNÍ DATOVÉ TYPY =======================================================
//== VLASTNÍ TESTY =============================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }
//%X+ <118
    

    public void testBlikni()
    {
        světlo0    .zhasni();
        světloXY   .zhasni();
        světloXYB  .zhasni();
//%X-
//%X+ <122
        světloXYP  .zhasni();
        světloXYPB .zhasni();
        světloXYPBZ.zhasni();
//%X-
//%X+ <118
        IO.čekej(500);
        světlo0    .blikni();
        světloXY   .blikni();
        světloXYB  .blikni();
//%X-
//%X+ <122
        světloXYP  .blikni();
        světloXYPB .blikni();
        světloXYPBZ.blikni();
//%X-
//%X+ <118
        IO.čekej(500);
        světlo0    .rozsviť();
        světloXY   .rozsviť();
        světloXYB  .rozsviť();
//%X-
//%X+ <122
        světloXYP  .rozsviť();
        světloXYPB .rozsviť();
        světloXYPBZ.rozsviť();
//%X-
//%X+ <118
    }

//%X-
//%X+ <124

    public void testPlynuléPosuny()
    {
        Přesouvač p = new Přesouvač(10);
        p.přesunNa(200,   0, světlo0);
        p.přesunNa(200,  50, světloXY);
        p.přesunNa(  0,   0, světloXYPBZ);
        p.přesunNa(200, 100, světloXYPB);
        p.přesunNa(150,   0, světloXYB);
        p.přesunNa(  0, 150, světloXYP);
    }

//%X-
//%X+ <123

    public void testPoziceVelikost()
    {
        pomPoziceVelikost(světloXYPBZ);
        pomPoziceVelikost(světloXYPB);
        pomPoziceVelikost(světloXYP);
        pomPoziceVelikost(světloXYB);
        pomPoziceVelikost(světloXY);
        pomPoziceVelikost(světlo0);
    }

//%X-
//%A+ >124

    public void testGetBarva()
    {
        assertEquals(Barva.MODRÁ, světloXYPB.getBarva());
        assertEquals(Barva.MODRÁ, světlo0.getBarva());
    }

//%A-
//%X+
     /** */
     public void testPřípravek() {}
//%X-
}
//%%-  ----- Začátek ignorovaného závěrečného textu -----
//%== //Takto se označí řádek, jenž bude odkomentován (vhodné např. pro importy)
//Je-li na 6 pozici mezera, odmaže se také

//== TESTY A METODA MAIN =======================================================
    private SvětloTest_117_124() {}

    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void ukliď()
        {
//            Plátno.smažPlátno();
            SprávcePlátna.getInstance().odstraňVše();
        }
    }


    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
//        junit.textui.TestRunner.run(suite());
//        junit.textui.TestRunner.run(new Třída("test"));
        Run.tests(SvětloTest.class,
                new TearDown(),
//                "testPřípravek",
//                "testBlikni",
//                "testPoziceVelikost",
//                "testPlynuléPosuny",
                "testProhoďPozice",
                "");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
